package com.itheima.controller;

import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 部门管理控制器
 */
@Slf4j
@RequestMapping("/depts") // 请求路径根据接口文档中指定的  depts标识处理dept部门表这组功能
@RestController   // 标识当前是一个请求处理类
public class DeptController {

//    private static final Logger log = LoggerFactory.getLogger(DeptController.class);

    @Autowired // 自动装配
    private DeptService deptService;

    /**
     * 查询部门列表
     * 访问/depts 请求时，返回部门列表数据用于显示页面
     * 不管是什么请求都需要给前端响应状态码，所以需要统一返回Result对象
     */
    @GetMapping
    public Result list(){
        log.info("查询所有部门信息");
        List<Dept> deptList = deptService.findAll(); // 封装至List集合中
        return Result.success(deptList); // 静态方法可直接调用
    }

    //根据部门id删除部门
    /*
    *通过Spring提供的 @RequestParam 注解，将请求参数绑定给方法形参
    * @DeleteMapping("/depts")
       public Result delete(@RequestParam("id") Integer deptId){
       * 此时@RequestParam("value") 注解的value属性，需要与前端传递的参数名保持一致, 即id等于前端传递的参数
       System.out.println("根据ID删除部门: " + deptId);
       return Result.success();}
       *
       * @RequestParam注解required属性默认为true，代表该参数必须传递，如果不传递将报错。 如果参数可选，可以将属性设置为false。
    * */
    @DeleteMapping
    public Result delete(Integer id){  // 此时省略了@RequestParam，请求参数名与形参变量名相同
//        System.out.println("根据部门id删除部门：" + id);  测试
//        log.info("根据部门id删除部门：" + id); 使用占位符
//        log.info("根据部门id删除部门：{}" , id);
        deptService.deleteById(id);
        return Result.success(); //
    }

    //@RequestBody
    @PostMapping
    public Result save(@RequestBody Dept dept){
//        System.out.println("保存部门：" + dept);   测试
        deptService.save(dept);
        return Result.success();
    }

    // 点击修改按钮，使原始数据回显于表单中  @PathVariable
    @GetMapping("/{id}")
    public Result selectById(@PathVariable Integer id){  // 此时@Pathvariable("id")路径变量传参  形参与路径参数一致时可省略
//        System.out.println("查询部门id：" + id);   测试
//        log.info("根据{}查询部门并回显至表单中", id);
        Dept dept = deptService.selectById(id);  // 封装为Dept对象
        return Result.success(dept);
    }
    @PutMapping
    public Result update(@RequestBody Dept dept){
//        System.out.println("修改部门：" + dept);   测试
        deptService.update(dept);
        return Result.success();
    }


}